// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import axios from './config/axios'
import sqlUtil from './config/common'
import store from './store'

// import { DesignTable, EditTable, ShowTable, Calculation } from 'vue-element-excel'

import VueContextMenu from 'vue-contextmenu'

import 'element-ui/lib/theme-chalk/index.css'
import {
    Pagination,
    Dialog,
    // Autocomplete,
    // Dropdown,
    // DropdownMenu,
    // DropdownItem,
    // Menu,
    // Submenu,
    // MenuItem,
    // MenuItemGroup,
    Input,
    // InputNumber,
    Radio,
    RadioGroup,
    RadioButton,
    Checkbox,
    // CheckboxButton,
    // CheckboxGroup,
    // Switch,
    Select,
    Option,
    OptionGroup,
    Button,
    // ButtonGroup,
    Table,
    TableColumn,
    // DatePicker,
    // TimeSelect,
    // TimePicker,
    Popover,
    // Tooltip,
    // Breadcrumb,
    // BreadcrumbItem,
    Form,
    FormItem,
    Tabs,
    TabPane,
    // Tag,
    Tree,
    Alert,
    // Slider,
    // Icon,
    Row,
    Col,
    // Upload,
    // Progress,
    // Spinner,
    // Badge,
    // Card,
    // Rate,
    // Steps,
    // Step,
    // Carousel,
    // CarouselItem,
    // Collapse,
    // CollapseItem,
    // Cascader,
    // ColorPicker,
    // Transfer,
    Container,
    Header,
    Aside,
    Main,
    Footer,
    // Timeline,
    // TimelineItem,
    // Link,
    // Divider,
    // Image,
    // Calendar,
    // Backtop,
    // PageHeader,
    // CascaderPanel,
    Loading,
    MessageBox,
    Message,
    // Notification
} from 'element-ui'

Vue.use(VueContextMenu)// 按需引入
// Vue.use(Pagination)// design(设计)
// Vue.use(DesignTable)// design(设计)
// Vue.use(EditTable)// edit（填报）
// Vue.use(ShowTable)// show（展示）
// Vue.use(Calculation)// 公式
Vue.config.productionTip = false

Vue.use(Pagination)
Vue.use(Dialog)
// Vue.use(Autocomplete)
// Vue.use(Dropdown)
// Vue.use(DropdownMenu)
// Vue.use(DropdownItem)
// Vue.use(Menu)
// Vue.use(Submenu)
// Vue.use(MenuItem)
// Vue.use(MenuItemGroup)
Vue.use(Input)
// Vue.use(InputNumber)
Vue.use(Radio)
Vue.use(RadioGroup)
Vue.use(RadioButton)
Vue.use(Checkbox)
// Vue.use(CheckboxButton)
// Vue.use(CheckboxGroup)
// Vue.use(Switch)
Vue.use(Select)
Vue.use(Option)
Vue.use(OptionGroup)
Vue.use(Button)
// Vue.use(ButtonGroup)
Vue.use(Table)
Vue.use(TableColumn)
// Vue.use(DatePicker)
// Vue.use(TimeSelect)
// Vue.use(TimePicker)
Vue.use(Popover)
// Vue.use(Tooltip)
// Vue.use(Breadcrumb)
// Vue.use(BreadcrumbItem)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Tabs)
Vue.use(TabPane)
// Vue.use(Tag)
Vue.use(Tree)
Vue.use(Alert)
// Vue.use(Slider)
// Vue.use(Icon)
Vue.use(Row)
Vue.use(Col)
// Vue.use(Upload)
// Vue.use(Progress)
// Vue.use(Spinner)
// Vue.use(Badge)
// Vue.use(Card)
// Vue.use(Rate)
// Vue.use(Steps)
// Vue.use(Step)
// Vue.use(Carousel)
// Vue.use(CarouselItem)
// Vue.use(Collapse)
// Vue.use(CollapseItem)
// Vue.use(Cascader)
// Vue.use(ColorPicker)
// Vue.use(Transfer)
Vue.use(Container)
Vue.use(Header)
Vue.use(Aside)
Vue.use(Main)
Vue.use(Footer)
// Vue.use(Timeline)
// Vue.use(TimelineItem)
// Vue.use(Link)
// Vue.use(Divider)
// Vue.use(Image)
// Vue.use(Calendar)
// Vue.use(Backtop)
// Vue.use(PageHeader)
// Vue.use(CascaderPanel)

Vue.use(Loading.directive)

Vue.prototype.$loading = Loading.service
// Vue.prototype.$msgbox = MessageBox
Vue.prototype.$alert = MessageBox.alert
Vue.prototype.$confirm = MessageBox.confirm
// Vue.prototype.$prompt = MessageBox.prompt
// Vue.prototype.$notify = Notification
Vue.prototype.$message = Message

// if (process.env.NODE_ENV !== 'production') {
// // eslint-disable-next-line no-undef
//   Vue.prototype.$utools = window.parent.utools
// } else {
// eslint-disable-next-line no-undef
// Vue.prototype.$utools = window.uilt
// }

// eslint-disable-next-line no-undef
Vue.prototype.$utools = utools

// eslint-disable-next-line no-undef
Vue.prototype.$uilt = window.uilt

Vue.prototype.$axios = axios
Vue.prototype.$sqlUtil = sqlUtil
Vue.config.productionTip = false


import jquery from 'jquery';
Vue.prototype.$JQ = jquery

// eslint-disable-next-line no-undef
Vue.prototype.$mysql = window.mysql
console.log(Vue.prototype.$mysql)


Vue.prototype.resetSetItem = function (key, newVal) {
    if (key === 'watchStorage') {

        // 创建一个StorageEvent事件
        var newStorageEvent = document.createEvent('StorageEvent');
        const storage = {
            setItem: function (k, val) {
                sessionStorage.setItem(k, val);

                // 初始化创建的事件
                newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null);

                // 派发对象
                window.dispatchEvent(newStorageEvent)
            }
        }
        return storage.setItem(key, newVal);
    }
}

//   import BigdataTable from 'vue-bigdata-table'

//  Vue.use(BigdataTable)



// function isArray(o) {
//     console.log(Object.prototype.toString.call(o))
//     return Object.prototype.toString.call(o) == '[object Array]';
// }

// // 给字符串添加原型
// Array.prototype.is_array = isArray;
// String.prototype.is_array = isArray;
// Number.prototype.is_array = isArray;





/**
 * JS判断一个值是否存在数组中
 */

// 定义一个判断函数
var in_array = function (arr) {
    
    // 判断参数是不是数组
    
    // var isArr = arr && console.log(
    //     typeof arr==='object' ? arr.constructor===Array ? arr.length ? arr.length===1 ? arr[0]:arr.join(','):'an empty array': arr.constructor: typeof arr 
    //   );
    // 不是数组则抛出异常
    if (!arr instanceof Array) {
        throw "arguments is not Array";
    }

    // 遍历是否在数组中
    for (var i = 0, k = arr.length; i < k; i++) {
        if (this == arr[i]) {
            return true;
        }
    }

    // 如果不在数组中就会返回false
    return false;
}

// 给字符串添加原型
String.prototype.in_array = in_array;
// 给数字类型添加原型
Number.prototype.in_array = in_array;



/* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
    store,
    components: { App },
    template: '<App/>',
})